import java.util.ArrayList;

abstract class Vehicule{
	private String immat;
	private int poids;
	
	//constructeur	
	public Vehicule(String immat, int poids){
		this.immat=immat; this.poids=poids;
	}
	
	//methode vitesseMax
	public abstract int vitesseMax();
	
	//methode toString
	public String toString(){
		return "Immatriculation : "+ immat + ", poids : "+poids+" tonnes";
	}
}

class Bus extends Vehicule{
	
	//Constructeur
	public Bus(String immat){
		super(immat, 4);
	}

	public int vitesseMax() {
		return 150;
	}

}
//Pour camions citernes et baches

abstract class GrosCamion extends Vehicule{
	protected int charge;
	
	//Constructeur
	public GrosCamion(String immat, int poids, int charge){
		super(immat, poids);
		this.charge=charge;
	}
	
	//vitesseMax()
	public abstract int vitesseMax();
	
	//toString
	public String toString(){
		return super.toString()+", charge maximale : "+charge+" tonnes";
	}
}

class Citerne extends GrosCamion{
	
	//Constructeur
	public Citerne(String immat, int charge){
		super(immat, 3, charge);
	}
	
	//vitesseMax
	public int vitesseMax(){
		if (charge==0){
			return 130;
		}
		else if (charge<=1){
			return 110;
		}
		else if (charge>1 && charge<=4){
			return 90;
		}
		else{
			return 80;
		}
	}
	
}

class Bache extends GrosCamion{
	
	//Constructeur
	public Bache(String immat, int charge){
		super(immat, 4, charge);
	}
	
	//vitesseMax()
	public int vitesseMax(){
		if (charge==0){
			return 130;
		}
		else if (charge<=3){
			return 110;
		}
		else if (charge>3 && charge<=7){
			return 90;
		}
		else return 80;
	}
	
}

class Convoi{
	private ArrayList<Vehicule> conv;
	
	//constructeur
	public Convoi(ArrayList<Vehicule> conv){
		this.conv=conv;
	}
	
	//vitesseMaxconv
	public float vitesseMaxConv(){
		float vit=0;
		int flag=0;
		
		for (Vehicule v : this.conv){
			vit+=v.vitesseMax();
			flag++;
		}
		vit/=flag;
		return vit;
	}
	//toString
	public String toString(){
		String tmp="";
		for (Vehicule v : conv){
			tmp+=(v+"\n");
		}
		
		return tmp;
	}
}


public class TestVehicule {

	public static void main(String[] args) {
		Bache c1=new Bache("1234A",15);
		Bache c2=new Bache("1234AZED",2);
		Citerne c3=new Citerne("1234E344",1);
		Citerne c4=new Citerne("123D4EFFE344",5);
		Bus c5= new Bus("EY76D");
		
//		System.out.println(c1+", Vitesse max : "+c1.vitesseMax()+" km/h");
//		System.out.println(c2+", Vitesse max : "+c2.vitesseMax()+" km/h");
		
		ArrayList<Vehicule> v= new ArrayList<Vehicule>();
		v.add(c1);
		v.add(c2);
		v.add(c3);
		v.add(c4);
		v.add(c5);
		Convoi conv= new Convoi(v);
		
		System.out.println(conv);
		for (Vehicule ve : v){
			System.out.println(ve.vitesseMax());
		}
		
		System.out.println("Vitesse max moyenne : "+conv.vitesseMaxConv()+" km/h");

	}

}
